package com.cps.platform.service.config;

import javax.ws.rs.Consumes;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.PUT;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.Response;

/**
 * <p>
 * 文件名称: IConfigService.java
 * </p>
 * <p>
 * 文件描述: 配置服务
 * <p>
 * 版权所有: 版权所有(C)2011
 * </p>
 * <p>
 * 公 司: 联通系统集成有限公司
 * </p>
 * <p>
 * 完成日期：2012-12-6
 * </p>
 * 
 * @author ChenZhang
 */
@Consumes({"application/json"})
public interface IConfigService {
	/**
	 * 获取服务的所有配置数据<br/>
	 * <p>
	 * 		在获取时先从内存中取，如果没有则从存储介质中取并且放入内存
	 * </p>
	 * @param appId
	 * @param authToken
	 * @return 返回的结果是Mapbean对象的JSON格式数据，Mapbean对象中只有一个Map属性。
	 */
	@GET
	@Path("/get/{appId}/{authToken}")
	@Produces({"application/json"})
	public String getConfig(@PathParam("appId") String appId, @PathParam("authToken") String authToken);
	
	/**
	 * 获取服务的key的配置数据
	 * @param appId
	 * @param authToken
	 * @param key
	 * @return 返回String数据
	 */
	@GET
	@Path("/get/{appId}/{authToken}/{key}")
	@Produces({"application/json"})
	public String getConfigByKey(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("key") String key);
	
	/**
	 * 获取各个服务的服务器访问基本地址
	 * @param appId
	 * @param authToken
	 * @return 返回的结果是Mapbean对象的JSON格式数据，Mapbean对象中只有一个Map属性。
	 */
	@GET
	@Path("/address")
	@Produces({"application/json"})
	public String getServiceBaseAddress();
	
	/**
	 * 添加配置数据<br/>
	 * <p>如果相同服务的key相同则覆盖，否则为添加</p>
	 * 
	 * @param appId
	 * @param authToken
	 * @param key
	 * @param value
	 * @return Response
	 */
	@PUT
	@Path("/save/{appId}/{authToken}/{key}/{value}")
	@Produces({"application/json"})
	public Response saveConfig(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("key")String key, @PathParam("value")String value);
	
	/**
	 * 移除服务中是key参数的配置数据
	 * @param appId
	 * @param authToken
	 * @param key
	 * @return
	 */
	@PUT
	@Path("/remove/{appId}/{authToken}/{key}")
	@Produces({"application/json"})
	public Response removeConfig(@PathParam("appId") String appId, @PathParam("authToken") String authToken, 
			@PathParam("key")String key);
	
	/**
	 * 移出服务相关的所有配置数据
	 * @param appId
	 * @param authToken
	 * @param serviceId
	 * @return
	 */
	@DELETE
	@Path("/remove/{appId}/{authToken}")
	@Produces({"application/json"})
	public Response removeConfig(@PathParam("appId") String appId, @PathParam("authToken") String authToken);
}
